package com.pet.controller;

import com.pet.bean.*;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

public class PetstorePart {
    //登录
    public static Integer loginPetstore(ObjectOutputStream oos, ObjectInputStream ois) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入账号");
        String loginName = sc.next();
        System.out.println("请输入密码");
        String pass = sc.next();
        Notification notification = new Notification();
        notification.setAction("loginPetstore");
        notification.setService("PetstoreService");
        HashMap<String, Object> map = new HashMap<>();
        map.put("loginName", loginName);
        map.put("pw", pass);
        notification.setMap(map);

        try {
            oos.writeObject(notification);
            notification = (Notification) ois.readObject();
            if (notification.isFlag()) {
                System.out.println("宠物商店："+notification.getMap().get("name") + " 登陆成功");
            } else {
                System.out.println(notification.getMap().get("message"));
                //重新调用
                loginPetstore(oos, ois);
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return (Integer) notification.getMap().get("s_id");
    }
    //注册
    public static void registerPetstore(ObjectOutputStream oos, ObjectInputStream ois) {
        // --实现控制台和用户的交互：【主人登录：读取主人的账号、密码】
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");
        String newName = sc.next();
        System.out.println("请输入密码");
        String newPw = sc.next();
        System.out.println("请输入财富");
        double newWea = Double.parseDouble(sc.next());
        Petstore petstore = new Petstore(newName, newPw, newWea);
        // --发送请求：可以使用一个方法来封装
        // 给服务端发送Notification数据【action、map】
        Notification notification = new Notification();
        //设置action、service、map，boolean不需要（给服务器提供的）
        notification.setAction("registerPetstore");
        notification.setService("PetstoreService");
        HashMap<String, Object> map = new HashMap<>();
        map.put("newPetstore", petstore);
        notification.setMap(map);

        try {
            //执行发送
            oos.writeObject(notification);
            //等待服务器处理后，接收服务器返回的数据
            notification = (Notification) ois.readObject();

            if (notification.isFlag()) {
                System.out.println("注册成功");
                //注册后不显示信息
//                System.out.println("当前宠物商店" + notification.getMap().get("newPetstore"));
            } else {//登录失败
                System.out.println(notification.getMap().get("message"));
                //重新调用
                registerPetstore(oos, ois);
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    //培育
    public static void addPet(Integer s_id, ObjectOutputStream oos, ObjectInputStream ois) {
        // --实现控制台和用户的交互：【主人登录：读取主人的账号、密码】
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入宠物名");
        String newName = sc.next();
        System.out.println("请输入价格");
        double newWor = Double.parseDouble(sc.next());
        System.out.println("请输入类型");
        String newType = sc.next();
        Pet pet = new Pet(newName, null, s_id, newWor, newType);
        // --发送请求：可以使用一个方法来封装
        // 给服务端发送Notification数据【action、map】
        Notification notification = new Notification();
        //设置action、service、map，boolean不需要（给服务器提供的）
        notification.setAction("addPet");
        notification.setService("PetstoreService");
        HashMap<String, Object> map = new HashMap<>();
        map.put("newPet", pet);
        notification.setMap(map);

        try {
            //执行发送
            oos.writeObject(notification);
            //等待服务器处理后，接收服务器返回的数据
            notification = (Notification) ois.readObject();

            if (notification.isFlag()) {
                System.out.println("培育成功");
                //注册后不显示信息
//                System.out.println("培育信息" + notification.getMap().get("newPet"));
            } else {//登录失败
                System.out.println(notification.getMap().get("message"));
                //重新调用
                addPet(s_id, oos, ois);
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    //查找宠物
    public static void checkPet(Integer s_id, ObjectOutputStream oos, ObjectInputStream ois) {
        // --发送请求：可以使用一个方法来封装
        // 给服务端发送Notification数据【action、map】
        Notification notification = new Notification();
        //设置action、service、map，boolean不需要（给服务器提供的）
        notification.setAction("checkPet");
        notification.setService("PetstoreService");
        HashMap<String, Object> map = new HashMap<>();
        map.put("s_id", s_id);
        notification.setMap(map);

        try {
            //执行发送
            oos.writeObject(notification);
            //等待服务器处理后，接收服务器返回的数据
            notification = (Notification) ois.readObject();

            if (notification.isFlag()) {
                System.out.println("查询成功,宠物信息如下（主人ID为0代表该宠物现在属于商店，反之同理）");
                //遍历输出宠物列表
                List<Pet> pets = (List<Pet>) notification.getMap().get("for-sale-list");
                for (Pet pet : pets) {
                    System.out.println("ID:" + pet.getPet_id() + " 名字:" + pet.getName() + " 商店ID:" + pet.getStore_id() +
                            " 主人ID:" + pet.getOwner_id() + " 价格:" + pet.getWorth() + " 类型:" + pet.getType());
//                    System.out.println(pet);
                }
            } else {//查询失败
                System.out.println(notification.getMap().get("message"));
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    //查找商店
    public static void checkStore(Integer s_id, ObjectOutputStream oos, ObjectInputStream ois) {
        // --发送请求：可以使用一个方法来封装
        // 给服务端发送Notification数据【action、map】
        Notification notification = new Notification();
        //设置action、service、map，boolean不需要（给服务器提供的）
        notification.setAction("checkStore");
        notification.setService("PetstoreService");
        HashMap<String, Object> map = new HashMap<>();
        map.put("s_id", s_id);
        notification.setMap(map);

        try {
            //执行发送
            oos.writeObject(notification);
            //等待服务器处理后，接收服务器返回的数据
            notification = (Notification) ois.readObject();

            if (notification.isFlag()) {
                System.out.println("查询成功,商店信息如下");
                Petstore petstore = (Petstore) notification.getMap().get("store-info");
                System.out.println("ID:" + petstore.getStore_id() + " 名字:" + petstore.getName() + " 密码:" + petstore.getPassword() +
                        " 财富:" + petstore.getWealth() + " 状态:" + petstore.getStatus());
            } else {//查询失败
                System.out.println(notification.getMap().get("message"));
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    //更新名字
    public static void updateStoreName(Integer s_id, String name, ObjectOutputStream oos, ObjectInputStream ois) {
        // --发送请求：可以使用一个方法来封装
        // 给服务端发送Notification数据【action、map】
        Notification notification = new Notification();
        //设置action、service、map，boolean不需要（给服务器提供的）
        notification.setAction("updateStoreName");
        notification.setService("PetstoreService");
        HashMap<String, Object> map = new HashMap<>();
        map.put("s_id", s_id);
        map.put("name", name);
        notification.setMap(map);

        try {
            //执行发送
            oos.writeObject(notification);
            //等待服务器处理后，接收服务器返回的数据
            notification = (Notification) ois.readObject();

            if (notification.isFlag()) {
                System.out.println(notification.getMap().get("success"));
            } else {
                System.out.println(notification.getMap().get("message"));
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    //更新密码
    public static void updateStorePw(Integer s_id, String password, ObjectOutputStream oos, ObjectInputStream ois) {
        // --发送请求：可以使用一个方法来封装
        // 给服务端发送Notification数据【action、map】
        Notification notification = new Notification();
        //设置action、service、map，boolean不需要（给服务器提供的）
        notification.setAction("updateStorePw");
        notification.setService("PetstoreService");
        HashMap<String, Object> map = new HashMap<>();
        map.put("s_id", s_id);
        map.put("pw", password);
        notification.setMap(map);

        try {
            //执行发送
            oos.writeObject(notification);
            //等待服务器处理后，接收服务器返回的数据
            notification = (Notification) ois.readObject();

            if (notification.isFlag()) {
                System.out.println(notification.getMap().get("success"));
            } else {
                System.out.println(notification.getMap().get("message"));
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    //更新财富
    public static void updateStoreWea(Integer s_id, double wealth, ObjectOutputStream oos, ObjectInputStream ois) {
        // --发送请求：可以使用一个方法来封装
        // 给服务端发送Notification数据【action、map】
        Notification notification = new Notification();
        //设置action、service、map，boolean不需要（给服务器提供的）
        notification.setAction("updateStoreWea");
        notification.setService("PetstoreService");
        HashMap<String, Object> map = new HashMap<>();
        map.put("s_id", s_id);
        map.put("wea", wealth);
        notification.setMap(map);

        try {
            //执行发送
            oos.writeObject(notification);
            //等待服务器处理后，接收服务器返回的数据
            notification = (Notification) ois.readObject();

            if (notification.isFlag()) {
                System.out.println(notification.getMap().get("success"));
            } else {
                System.out.println(notification.getMap().get("message"));
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    //查看记录
    public static void checkAccount(Integer s_id, ObjectOutputStream oos, ObjectInputStream ois) {
        // --发送请求：可以使用一个方法来封装
        // 给服务端发送Notification数据【action、map】
        Notification notification = new Notification();
        //设置action、service、map，boolean不需要（给服务器提供的）
        notification.setAction("checkAccount");
        notification.setService("PetstoreService");
        HashMap<String, Object> map = new HashMap<>();
        map.put("s_id", s_id);
        notification.setMap(map);

        try {
            //执行发送
            oos.writeObject(notification);
            //等待服务器处理后，接收服务器返回的数据
            notification = (Notification) ois.readObject();

            if (notification.isFlag()) {
                System.out.println("查询成功,交易记录如下");
                //遍历输出宠物列表
                List<Account> accounts = (List<Account>) notification.getMap().get("account-list");
                for (Account account : accounts) {
                    if (account.getType()==1){
                        System.out.println("出售者-商店ID:"+account.getSale_id()+" 购买者-主人ID:"+account.getBuy_id()+
                                " 交易宠物ID:"+account.getPet_id()+ " 价格:"+account.getPrice()+" 交易时间:"+account.getOrder_date());
                    }else if (account.getType()==2){
                        System.out.println("出售者-主人ID:"+account.getSale_id()+" 购买者-商店ID:"+account.getBuy_id()+
                                " 交易宠物ID:"+account.getPet_id()+" 价格:"+account.getPrice()+" 交易时间:"+account.getOrder_date());
                    }
                }
            } else {//查询失败
                System.out.println(notification.getMap().get("message"));
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    //注销
    public static void deleteStore(Integer s_id, ObjectOutputStream oos, ObjectInputStream ois) {
        // --发送请求：可以使用一个方法来封装
        // 给服务端发送Notification数据【action、map】
        Notification notification = new Notification();
        //设置action、service、map，boolean不需要（给服务器提供的）
        notification.setAction("deleteStore");
        notification.setService("PetstoreService");
        HashMap<String, Object> map = new HashMap<>();
        map.put("s_id", s_id);
        notification.setMap(map);

        try {
            //执行发送
            oos.writeObject(notification);
            //等待服务器处理后，接收服务器返回的数据
            notification = (Notification) ois.readObject();

            if (notification.isFlag()) {
                System.out.println(notification.getMap().get("success"));
            } else {//查询失败
                System.out.println(notification.getMap().get("message"));
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}
